package com.dszq.wemedia.controller.v1;

import com.dszq.common.constants.WemediaConstants;
import com.dszq.model.common.dtos.ResponseResult;
import com.dszq.model.wemedia.dtos.NewsAuthDto;
import com.dszq.model.wemedia.dtos.WmNewsDto;
import com.dszq.model.wemedia.dtos.WmNewsPageReqDto;
import com.dszq.wemedia.service.WmNewsService;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * [一句话描述该类的功能]
 *
 * @author : [Lenovo]
 * @version : [v1.0]
 * @createTime : [2024/4/18 15:22]
 */
@RestController
@RequestMapping("/api/v1/news")
public class WmNewsController {
    @Autowired
    private WmNewsService wmNewsService;
    @PostMapping("/list")
    public ResponseResult findAll(@RequestBody WmNewsPageReqDto wmNewsPageReqDto)
    {
        return wmNewsService.findAll(wmNewsPageReqDto);
    }

    /**
     * 提交新闻信息
     *
     * @param wmNewsDto 包含新闻数据的传输对象，通过RequestBody接收前端传来的JSON数据
     * @return 返回处理结果的响应体，包含操作是否成功、错误码和错误信息等
     */
    @PostMapping("/submit")
    public ResponseResult submitNews(@RequestBody WmNewsDto wmNewsDto) {
        // 将新闻数据提交给新闻服务进行处理
        return wmNewsService.submitNews(wmNewsDto);
    }

    /**
     * 根据新闻ID获取一条新闻的详细信息。
     *
     * @param id 新闻的唯一标识符，从URL路径变量中获取。
     * @return 返回一个包含新闻详细信息的ResponseResult对象。
     */
    @GetMapping("/one/{id}")
    public ResponseResult getOneNew(@PathVariable Integer id)
    {
        return wmNewsService.getOneNew(id); // 通过服务层方法获取指定ID的新闻详细信息
    }
    /**
     * 根据新闻ID删除新闻
     *
     * @param id 新闻的唯一标识符
     * @return 返回操作结果，成功返回true，失败返回false
     */
    @GetMapping("/del_news/{id}")
    public ResponseResult deleteNewById(@PathVariable Integer id)
    {
        // 调用服务层方法，根据ID删除新闻
        return wmNewsService.deleteNewById(id);
    }
    /**
     * 处理新闻的上下架操作。
     *
     * @param wmNewsDto 包含新闻相关信息的传输对象，用于指定需要进行上下架操作的新闻。
     * @return 返回一个响应结果，包含操作是否成功及其相关信息。
     */
    @PostMapping("/down_or_up")
    public ResponseResult downOrUp(@RequestBody WmNewsDto wmNewsDto)
    {
        // 调用服务层方法，执行新闻的上下架操作
        return wmNewsService.downOrUp(wmNewsDto);
    }

    /**
     * 通过POST请求查找文章信息。
     *
     * @param newsAuthDto 接收客户端传来的新闻授权信息数据传输对象，包含用于查询文章的条件。
     * @return 返回查询结果的响应体，封装了查询到的文章信息。
     */
    @PostMapping("/list_vo")
    public ResponseResult findArticles(@RequestBody NewsAuthDto newsAuthDto)
    {
        // 调用服务层方法，根据传入的新闻授权信息查询文章
        return wmNewsService.findArticles(newsAuthDto);
    }

    /**
     * 根据新闻ID查询最新的新闻信息。
     *
     * @param id 新闻的唯一标识符。
     * @return 返回一个包含查询结果的ResponseResult对象。
     */
    @GetMapping("/one_vo/{id}")
    public ResponseResult findOneNews(@PathVariable Integer id)
    {
        // 调用服务层方法，查询指定ID的最新新闻
        return wmNewsService.findOneNew(id);
    }

    /**
     * 处理新闻认证失败的逻辑。
     *
     * @param newsAuthDto 包含新闻认证信息的数据传输对象，用于传递新闻的认证状态和其它必要信息。
     * @return 返回操作结果，包括操作是否成功、错误码等信息。
     */
    public ResponseResult authFailNews(@RequestBody NewsAuthDto newsAuthDto)
    {
        // 调用服务层方法，将新闻认证状态设置为失败，并返回操作结果
        return wmNewsService.updateNews(newsAuthDto, WemediaConstants.WM_NEWS_AUTH_FAIL);
    }

}
